1,首先新建最基本的抽象類,這個類在以後作爲其他對象new的結果進行了返回
public abstract class ABattercake {
protected abstract String getDesc();
protected abstract int cost();
}
2,新建第二個副加的抽象類,這個抽象類呢,是繼承了第一套的抽象的類
public abstract class AbstractDecorator extends ABattercake {
private ABattercake aBattercake;
public AbstractDecorator(ABattercake aBattercake) {
this.aBattercake = aBattercake;
}
protected abstract void doSomething();
@Override
protected String getDesc() {
return this.aBattercake.getDesc();
}
@Override
protected int cost() {
return this.aBattercake.cost();
}
}
3,寫實踐類,首先寫主題,煎餅這個類
public class Battercake extends ABattercake {
@Override
protected String getDesc() {
return "煎餅";
}
@Override
protected int cost() {
return 8;
}
}
4,寫雞蛋這個類,這個類是繼承了副加的抽象類
public class EggDecorator extends AbstractDecorator {
public EggDecorator(ABattercake aBattercake) {
super(aBattercake);
}
@Override
protected void doSomething() {
}
@Override
protected String getDesc() {
return super.getDesc()+" 加一個雞蛋";
}
@Override
protected int cost() {
return super.cost()+1;
}
}
香腸類
public class SausageDecorator extends AbstractDecorator{
public SausageDecorator(ABattercake aBattercake) {
super(aBattercake);
}
@Override
protected void doSomething() {
}
@Override
protected String getDesc() {
return super.getDesc()+" 加一根香腸";
}
@Override
protected int cost() {
return super.cost()+2;
}
}
觀察這個類,裏面的構造函數,是使用了最基礎的那個類了
5,寫測試的類
public class Test {
public static void main(String[] args) {
ABattercake aBattercake;
aBattercake = new Battercake();
aBattercake = new EggDecorator(aBattercake);
aBattercake = new EggDecorator(aBattercake);
aBattercake = new SausageDecorator(aBattercake);
System.out.println(aBattercake.getDesc()+" 銷售價格:"+aBattercake.cost());
}
}
仔細觀察這個類,發現這個抽象的方法多次的進行了調用。